﻿$(document).ready(function () {
    if (typeof (VOFFICE) == "undefined") {
        // ReSharper disable AssignToImplicitGlobalInFunctionScope
        VOFFICE = {};
        // ReSharper restore AssignToImplicitGlobalInFunctionScope
    }
    VOFFICE.ManageFlow = (function () {
        var methods = {};
        methods.PageSize = 50;
        methods.DocTypeList = null;
        methods.FlowGrid = null;
        //chứa list các model flow
        methods.Collection = null;

        var $table = $('#list-details');
        var $pager = $('#pager');

        var $buttonSearch = $('#btn-search');
        var $btnCancelSearch = $('#btn-cancel-search');
        var $key = $('#ipt-search');
        methods.busy = false;

        methods.$dialog = $('#flow-dialog').dialog({
            autoOpen: false,
            show: "fade",
            hide: "fade",
            modal: true,
            height: 'auto',
            width: 480,
            open: function (event, ui) {
            },
            close: function (event, ui) {
            }
        });

        var searchFlow = function (event) {
            ///<summary>
            /// Sụ kiện khi click vào nút tìm kiếm
            ///</summary>
            var key = $key.val();
            if (!!key && key.length >= 2) {
                $btnCancelSearch.show();
                SaveIndicator.indicate($.get('/flow/search_flow', { key: key }, function (data) {
                    if (!!data && data.Status == true) {
                        if (!!data.Result) {
                            VH.DateUtility.FixDates(data);
                            var list = new FlowCollection();
                            if (data.Result.length > 0) {
                                _.each(data.Result, function (item) {
                                    var flow = new Flow({
                                        'id': item.Id,
                                        'Name': item.Name,
                                        'Description': item.Description,
                                        'IsActive': item.IsActive,
                                        'IsCommon': item.IsCommon,
                                        'DocTypeId': item.DocTypeId,
                                        'CreatedAt': item.CreatedAt,
                                        'UpdatedAt': item.UpdatedAt,
                                        'IsReady': item.IsReady,
                                        'DocTypeName': item.DocTypeName
                                    });
                                    list.push(flow);
                                });
                                $table.find('tbody').remove();
                                $table.fadeIn();
                                methods.Collection = list;
                                methods.FlowGrid = new FlowGrid({ collection: list });
                                $table.append(methods.FlowGrid.render().el);
                            } else {
                                VH.MessageBox(jsResources.lang.ManageFlowSearchNoItem);
                            }
                            $pager.fadeOut();
                        }
                    }
                }));
            } else {
                $key.focus();
            }
        };

        var cancelSearchFlow = function (event) {
            /// <summary>
            /// Bỏ tìm kiếm
            /// </summary>
            $key.val('');
            $btnCancelSearch.hide();
            getPagedFlow(1);
        };

        /* 
        Lấy danh sách luồng từ database
        */
        var getPagedFlow = function (pageIndex) {
            pageIndex = parseFloat(pageIndex) - 1;
            //lấy dữ liệu
            SaveIndicator.indicate($.get('/flow/get_all_flows', { 'pageIndex': pageIndex, 'pageSize': methods.PageSize }, function (data) {
                if (!!data && data.Status == true) {
                    if (!!data.Result.List) {
                        VH.DateUtility.FixDates(data);
                        $table.find('tbody').remove();
                        var list = new FlowCollection();
                        if (data.Result.List.length > 0) {
                            _.each(data.Result.List, function (item) {
                                var flow = new Flow({
                                    'id': item.Id,
                                    'Name': item.Name,
                                    'Description': item.Description,
                                    'IsActive': item.IsActive,
                                    'IsCommon': item.IsCommon,
                                    'DocTypeId': item.DocTypeId,
                                    'CreatedAt': item.CreatedAt,
                                    'UpdatedAt': item.UpdatedAt,
                                    'IsReady': item.IsReady,
                                    'DocTypeName': item.DocTypeName
                                });
                                list.push(flow);
                            });
                            $table.fadeIn();
                        }
                        methods.Collection = list;
                        methods.FlowGrid = new FlowGrid({ collection: list });
                        $table.append(methods.FlowGrid.render().el);

                        //phân trang
                        paging(1 + data.Result.PageIndex, data.Result.PageCount);
                    } else {

                    }
                }
            }));
        };

        /*
        Tạo phân trang
        */
        var paging = function (currentPage, pageCount) {
            if (pageCount > 1) {
                $pager.pager({ pagenumber: currentPage, pagecount: pageCount, buttonClickCallback: getPagedFlow });
                $pager.fadeIn();
            }
        };

        var getKeyValue = function () {
            /// <summary>
            /// Lấy doctypelist để phục vụ chỉnh sửa
            ///</summary>
            $.get('/keyvalue/get_doctype_list', { 'nocache': (new Date()).toJSON() }, function (data) {
                if (!!data && data.Status == true) {
                    methods.DocTypeList = data.Result;
                }
            });
        };

        methods.addNew = function (event) {
            window.location = "/admin/createflow";
        };
        /* 
        Hàm khởi tạo 
        */
        methods.init = function () {
            getPagedFlow(1);
            getKeyValue();
            var $addNew = $('#add-new');
            $addNew.live('click', methods.addNew);
            $addNew.button().addClass('ui-button-primary');
            $buttonSearch.button();
            $btnCancelSearch.button().css('display', 'none');
            $buttonSearch.bind('click', searchFlow);
            $btnCancelSearch.bind('click', cancelSearchFlow);

        };
        return methods;
    })(VOFFICE.ManageFlow);
});

/*
Chứa một collection là list các book model
gọi đến FlowGridItem để hiển thị dữ liệu
*/
window.FlowGrid = Backbone.View.extend({
    tagName: 'tbody',
    render: function () {
        $(this.el).html('');
        var i = 1;
        _.each(this.collection.models, function (flow) {
            flow.set({ 'Order': i });
            $(this.el).append((new FlowGridItem({ model: flow })).render().el);
            i++;
        }, this);
        return this;
    },

    /* 
    Khi grid có thêm bản ghi thì cập nhập
    */
    initialize: function () {
        var self = this;
        this.collection.bind("reset", this.render, this);
        this.collection.bind("add", function (flow) {
            $(self.el).prepend(new FlowGridItem({ model: flow }).render().el);
        });
    }
});

/*
Từng item trong grid dữ liệu
các item này tạo thành table chứa thông tin tất cả các book có trong hệ thống
*/
window.FlowGridItem = Backbone.View.extend({
    tagName: 'tr',

    //bind để tự động cập nhập lại dữ liệu khi các field của model thay đổi
    initialize: function () {
        this.model.bind("change", this.render, this);
        this.model.bind("destroy", this.close, this);
    },
    /*
    Các sự kiện trên một dòng trong grid 
    */
    events: {
        'click .grid-delete-flow': 'deleteFlow',
        'change .cbxIsActive': 'activeFlow',
        'change .cbxIsCommon': 'commonFlow'
    },

    /*
    Chọn xem có là sổ văn bản mặc định hay không
    */
    commonFlow: function (event) {
        ///<summary>
        /// Đặt luồng dùng chung hoặc dùng riêng cho loại công văn nào đó
        ///</summary>
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        if ($target.is(':checked') || !!self.model.get('DocTypeId')) {
            // nếu là true thì cập nhập lên csdl luôn
            SaveIndicator.indicate(self.model.save({ 'IsCommon': $target.is(':checked'), 'modified': 'IsCommon' }, { success: function (data) {
                if (!data || data.get('Status') == false) {
                    VH.MessageBox(jsResources.lang.RequestError, function () {
                        location.reload();
                    });
                }
            }
            }));
        } else {
            // nếu là false thì hiển thị form để nhập
            var template = _.template($('#doctype-to-flow-template').html());
            VOFFICE.ManageFlow.$dialog.dialog({
                title: jsResources.lang.ManageFlowAddDocTypeTitle
            }).html(template());
            var $buttonAddDocType = $('#SaveDocTypeToFlow');
            $buttonAddDocType.button();
            $buttonAddDocType.unbind('click');
            $buttonAddDocType.bind('click', function () {
                var $doctype = $('#select-doctype-id');
                if ($doctype.length > 0) {
                    var selected = $doctype.val();
                    if (selected == "0") {
                        $doctype.focus();
                        return;
                    } else {
                        SaveIndicator.indicate(self.model.save({
                            'IsCommon': false,
                            'DocTypeName': $doctype.find('option:selected').first().text(),
                            'DocTypeId': selected,
                            'modified': 'DocTypeId'
                        }, {
                            success: function (data) {
                                console.log(data);
                                if (!data || data.get('Status') == false) {
                                    VH.MessageBox(jsResources.lang.RequestError, function () {
                                        location.reload();
                                    });
                                } else {
                                    alert('true');
                                    VOFFICE.ManageFlow.$dialog.dialog("close");
                                }
                            }
                        }));
                    }
                }
            });
            VOFFICE.ManageFlow.$dialog.dialog("open");
        }
    },

    /*
    Active hay InActive sổ văn bản
    */
    activeFlow: function (event) {
        ///<summary>
        /// Sử dụng hay không sử dụng luồng nào đó
        ///</summary>
        var $target = $(event.currentTarget);
        var self = this;
        //luu du lieu
        SaveIndicator.indicate(self.model.save({ 'IsActive': $target.is(':checked'), 'modified': 'IsActive' }, function (data) {
            if (!data || data.get('Status') == false) {
                VH.MessageBox(jsResources.lang.RequestError, function () {
                    location.reload();
                });
            }
        }));
    },

    /*
    Xóa sổ văn bản
    */
    deleteFlow: function (event) {
        ///<summary>
        /// Xóa luồng, nếu luồng đã cấu hình thì không cho xóa, sau này có thể detect luồng đã sử dụng hay chưa
        ///</summary>
        var self = this;
        VH.ConfirmBox(jsResources.ManageFlowDeleteConfirm(self.model.get('Name')), jsResources.lang.Delete, jsResources.lang.Cancel,
            function () {
                //xoa du lieu
                SaveIndicator.indicate($.post('/flow/delete_flow', { id: self.model.get('id') }, function (data) {
                    if (!!data && data.Status == true) {
                        self.close();
                    } else {
                        VH.MessageBox(jsResources.lang.ManageFlowFailDeleting, function () {
                            location.reload();
                        });
                    }
                }));
            },
            function () {
                return true;
            }
        );
    },
    /*
    Kết hợp template và model để hiển thị lên 1 dòng (tr)
    chứa thông tin của 1 sổ văn bản trong grid
    */
    render: function () {
        this.template = _.template($('#list-flow-item-template').html());
        $(this.el).html(this.template({ model: this.model.toJSON() }));
        return this;
    },

    close: function () {
        this.model.unbind("change", this.render, this);
        this.unbind();
        this.remove();
    }
});